#ifndef __MAIN_H
#define __MAIN_H

#include "gd32f4xx_hal_conf.h"

#define S1_LOCK_Pin GPIO_PIN_12
#define S1_LOCK_GPIO_Port GPIOA
#define S1_CW_Pin GPIO_PIN_7
#define S1_CW_GPIO_Port GPIOD
#define S1_EN_Pin GPIO_PIN_12
#define S1_EN_GPIO_Port GPIOA

#define S2_LOCK_Pin GPIO_PIN_12
#define S2_LOCK_GPIO_Port GPIOA
#define S2_CW_Pin GPIO_PIN_9
#define S2_CW_GPIO_Port GPIOC
#define S2_EN_Pin GPIO_PIN_12
#define S2_EN_GPIO_Port GPIOA

#define S3_LOCK_Pin GPIO_PIN_12
#define S3_LOCK_GPIO_Port GPIOA
#define S3_CW_Pin GPIO_PIN_14
#define S3_CW_GPIO_Port GPIOB
#define S3_EN_Pin GPIO_PIN_12
#define S3_EN_GPIO_Port GPIOA

#define S4_LOCK_Pin GPIO_PIN_12
#define S4_LOCK_GPIO_Port GPIOA
#define S4_CW_Pin GPIO_PIN_6
#define S4_CW_GPIO_Port GPIOA
#define S4_EN_Pin GPIO_PIN_12
#define S4_EN_GPIO_Port GPIOA

#define S1_HOME_Pin GPIO_PIN_5
#define S1_HOME_GPIO_Port GPIOD
#define S2_HOME_Pin GPIO_PIN_15
#define S2_HOME_GPIO_Port GPIOD
#define S3_HOME_Pin GPIO_PIN_11
#define S3_HOME_GPIO_Port GPIOE
#define S4_HOME_Pin GPIO_PIN_2
#define S4_HOME_GPIO_Port GPIOB

#define S1_LIMIT_Pin GPIO_PIN_4
#define S1_LIMIT_GPIO_Port GPIOD
#define S2_LIMIT_Pin GPIO_PIN_14
#define S2_LIMIT_GPIO_Port GPIOD
#define S3_LIMIT_Pin GPIO_PIN_10
#define S3_LIMIT_GPIO_Port GPIOE
#define S4_LIMIT_Pin GPIO_PIN_1
#define S4_LIMIT_GPIO_Port GPIOB

#define V1_Pin GPIO_PIN_1
#define V1_GPIO_Port GPIOD
#define V2_Pin GPIO_PIN_10
#define V2_GPIO_Port GPIOD
#define V3_Pin GPIO_PIN_7
#define V3_GPIO_Port GPIOE
#define V4_Pin GPIO_PIN_4
#define V4_GPIO_Port GPIOA

#define START_S1_PRESSED_Pin GPIO_PIN_3
#define START_S1_PRESSED_GPIO_Port GPIOD
#define START_S2_PRESSED_Pin GPIO_PIN_13
#define START_S2_PRESSED_GPIO_Port GPIOD
#define START_S3_PRESSED_Pin GPIO_PIN_9
#define START_S3_PRESSED_GPIO_Port GPIOE
#define START_S4_PRESSED_Pin GPIO_PIN_0
#define START_S4_PRESSED_GPIO_Port GPIOB
#define STOP_PRESSED_Pin GPIO_PIN_12
#define STOP_PRESSED_GPIO_Port GPIOD

#define LED_Pin GPIO_PIN_10
#define LED_GPIO_Port GPIOB
#define START_S1_LED_Pin GPIO_PIN_2
#define START_S1_LED_GPIO_Port GPIOD
#define START_S2_LED_Pin GPIO_PIN_11
#define START_S2_LED_GPIO_Port GPIOD
#define START_S3_LED_Pin GPIO_PIN_8
#define START_S3_LED_GPIO_Port GPIOE
#define START_S4_LED_Pin GPIO_PIN_5
#define START_S4_LED_GPIO_Port GPIOC
#define STOP_LED_Pin GPIO_PIN_11
#define STOP_LED_GPIO_Port GPIOE

#define SWITCH6_Pin GPIO_PIN_8
#define SWITCH6_GPIO_Port GPIOB
#define SWITCH5_Pin GPIO_PIN_9
#define SWITCH5_GPIO_Port GPIOB
#define SWITCH4_Pin GPIO_PIN_0
#define SWITCH4_GPIO_Port GPIOE
#define SWITCH3_Pin GPIO_PIN_1
#define SWITCH3_GPIO_Port GPIOE
#define SWITCH2_Pin GPIO_PIN_2
#define SWITCH2_GPIO_Port GPIOE
#define SWITCH1_Pin GPIO_PIN_3
#define SWITCH1_GPIO_Port GPIOE

#define SPICS1_Pin GPIO_PIN_6
#define SPICS1_GPIO_Port GPIOD
#define SPICS2_Pin GPIO_PIN_8
#define SPICS2_GPIO_Port GPIOC
#define SPICS3_Pin GPIO_PIN_13
#define SPICS3_GPIO_Port GPIOB
#define SPICS4_Pin GPIO_PIN_5
#define SPICS4_GPIO_Port GPIOA



#define USART0_IRQ_NVIC_PRE_PRIORITY  0
#define USART0_IRQ_NVIC_SUB_PRIORITY  0

#define TIMER6_NVIC_IRQ_PRE_PRIORITY  1
#define TIMER6_NVIC_IRQ_SUB_PRIORITY  0


void _Error_Handler(char *, int);

#define Error_Handler() _Error_Handler(__FILE__, __LINE__)

#endif /* __MAIN_H */
